home *** CD-ROM | disk | FTP | other *** search
/ Java for 3D & VRML Worlds / Java for 3d and VRML Worlds.iso / examples / chap05 / MuDispatcher.java < prev    next >
Text File  |  1996-10-06  |  2KB  |  91 lines

  1. // MuDispatcher.java
  2. // dispatch a client's message to other clients
  3. import java.net.*;
  4. import java.io.*;
  5. import java.util.*;
  6.  
  7. class MuDispatcher extends Thread {
  8.    DataInputStream in = null;
  9.    DataOutputStream out = null;
  10.    Vector clients;
  11.  
  12.    MuDispatcher(Socket s, Vector c, int id){
  13.       super("MuDispatcher");
  14.  
  15.       clients = c;
  16.  
  17.       try {
  18.          // create input/output streams from/to client
  19.          in = new DataInputStream(s.getInputStream());
  20.          out = new DataOutputStream(s.getOutputStream());
  21.  
  22.          out.writeInt(id); // send id to client
  23.  
  24.          this.start();       // start this thread
  25.       } catch (IOException e) {
  26.          e.printStackTrace();
  27.       }
  28.    }
  29.  
  30.    public void run(){
  31.       int id;
  32.       int command;
  33.       float x=0f, y=0f, z=0f, r=0f;
  34.  
  35.       try{
  36.          while(true){
  37.     // read message from a client
  38.     id = in.readInt();
  39.     command = in.readInt();
  40.     x = in.readFloat();
  41.     y = in.readFloat();
  42.     z = in.readFloat();
  43.     if(MuProtocol.ROTATION == command){ r = in.readFloat();}
  44.  
  45.     // dispatch message to other clients
  46.     for(int i = 0; i < clients.size(); i++){
  47.        if(i != id){
  48.           if(MuProtocol.ROTATION == command){
  49.              ((MuDispatcher)clients.elementAt(i)).output(id, command, x, y, z, r);
  50.           }else{
  51.              ((MuDispatcher)clients.elementAt(i)).output(id, command, x, y, z);
  52.           }
  53.        } // else{
  54.           // System.out.println("dispatch client " + i +    
  55.           //              ": (" + x + "," + y + "," + z + ") to others...");    
  56.           // }
  57.     }
  58.          }
  59.       }catch (IOException e){
  60.          e.printStackTrace();
  61.       }
  62.    }
  63.  
  64.    // send message to client
  65.    public synchronized void output(int id, int command, float x, float y, float z){
  66.       try{
  67.          out.writeInt(id);
  68.          out.writeInt(command);
  69.          out.writeFloat(x);
  70.          out.writeFloat(y);
  71.          out.writeFloat(z);
  72.       }catch (IOException e){
  73.          e.printStackTrace();
  74.       }
  75.    }
  76.  
  77.    // send message to client
  78.    public synchronized void output(int id, int command, float x, float y, float z, float r){
  79.       try{
  80.          out.writeInt(id);
  81.          out.writeInt(command);
  82.          out.writeFloat(x);
  83.          out.writeFloat(y);
  84.          out.writeFloat(z);
  85.          out.writeFloat(r);
  86.       }catch (IOException e){
  87.          e.printStackTrace();
  88.       }
  89.    }
  90. }
  91.